#ifndef _LISTAPONTOSPERCURSO
#define _LISTAPONTOSPERCURSO

#include <stdio.h>
#include <stdlib.h>
#include <gl.h>

typedef struct tLista_ {
	float x, y;
	struct tLista_ *proximo;
} tLista;

class ListaPontosPercurso
{
private:
	tLista *primeiro;
	tLista *atual;
	int nrPontos;
	char nameDir[100];

public:
	ListaPontosPercurso();
	void inserePonto(float x, float y);
	void desenha();
	// grava a lista em um arquivo e a destroi
	void gravaLista(int nrForma);
	void setNameDir(char *n);

};

ListaPontosPercurso::ListaPontosPercurso()
{
	primeiro = atual = NULL;
	nrPontos = 0;
}

void ListaPontosPercurso::setNameDir(char *n){
	strcpy(nameDir, n);
}

void ListaPontosPercurso::desenha()
{
	tLista *aux;

	glColor3f(0.8f, 0.8f, 0.8f);
	glLineWidth(1.0f);
	glBegin(GL_LINE_STRIP);
	for (aux = primeiro; aux != NULL; aux = aux->proximo)
	{
		glVertex2f(aux->x, aux->y);
	}
	glEnd();
}

void ListaPontosPercurso::inserePonto(float x, float y)
{
	tLista *novo = (tLista*)malloc(sizeof(tLista));
	novo->x = x;
	novo->y = y;
	novo->proximo = NULL;
	if (primeiro == NULL)
	{
		primeiro = atual = novo;
	}
	else
	{
		atual->proximo = novo;
		atual = novo;
	}
	nrPontos++;
}

void ListaPontosPercurso::gravaLista(int nrForma)
{
	char arq[150];
	FILE *fp;
	tLista *aux;

	sprintf(arq, "C:\\testes\\%s\\percurso_forma_%d.txt", nameDir, nrForma+1);
	if (!fopen_s(&fp, arq, "w"))
		printf("%s criado\n", arq);
	else
		printf("%s nao foi criado\n", arq);

	fprintf_s(fp, "%d pontos - Forma %d \n\n", nrPontos, nrForma+1);

	for (aux = primeiro; aux != NULL; aux = aux->proximo)
	{
		fprintf_s(fp, "%f %f \n", aux->x, aux->y);
	}

	fclose(fp);

	atual = primeiro;
	for (aux = primeiro->proximo; aux != NULL; aux = aux->proximo)
	{
		free(atual);
		atual = aux;
	}
	free(atual);

	primeiro = atual = NULL;
	nrPontos = 0;
}

#endif
